﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.Data;
using System.IO;

namespace Guarouba
{
    public partial class MenuSuperior : System.Web.UI.UserControl
    {
        #region Vars Públicas

        private StringBuilder sbMenu = new StringBuilder();
        private StringBuilder sbMenuPai = new StringBuilder();
        private StringBuilder sbMenuFilho = new StringBuilder();

        private string curMenuPai = string.Empty;
        private string curMenuFilho = string.Empty;
        private string lastMenuPai = string.Empty;
        private string pagina = string.Empty;

        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                if (Request.Cookies["grba"] == null)
                {
                    //Verifica se a página é de Login, e caso não, redireciona para o Login
                    string currentPage = new FileInfo(this.Request.Url.LocalPath).Name;
                    if (currentPage != "Default.aspx")
                    {
                        //Pega o nome da página atual e encripta para setar na QS
                        currentPage = Classes.Tools.Encript(currentPage);
                        Response.Redirect(string.Format("~/Pages/Default.aspx?CRPage={0}", currentPage));
                    }
                }
                else
                {
                    DataTable dt = new DataTable();
                    string idUsuario = Request.Cookies["grba"]["IDUsuario"].ToString();
                    idUsuario = Classes.Tools.Decript(idUsuario);

                    BLL.Seguranca seg = new BLL.Seguranca();
                    dt = seg.ProgramasUsuarioPermissao(idUsuario);
                    if (dt != null)
                        MontarMenu(dt);

                    //Pegar o nome do usuário
                    DefineNomeUsuario();
                }                
            }            
        }

        private void FinalizaMenuPai(bool isLastRegister, string mnFilho, string pagina)
        {
            sbMenuPai.AppendLine(@"<li class=""dropdown"">");
            sbMenuPai.AppendLine(@"<a href=""#"" class=""dropdown-toggle"" data-toggle=""dropdown"">");

            //Nessa linha adiciona o nome do Menu Pai
            sbMenuPai.AppendLine(lastMenuPai);

            sbMenuPai.AppendLine(@"<b class=""caret""></b>");
            sbMenuPai.AppendLine(@"</a>");
            sbMenuPai.AppendLine(@"<ul class=""dropdown-menu"">");

            //Nessa linha adiciona os Menus Filhos
            sbMenuPai.AppendLine(sbMenuFilho.ToString());

            sbMenuPai.AppendLine(@"</ul>");
            sbMenuPai.AppendLine(@"</li>");

            //Limpar SB Menu Filho para novos cadastros
            sbMenuFilho.Clear();

            //Verifica se é o último Registro para finalizar a Montagem do Menu
            if (!isLastRegister)
            {
                sbMenuFilho.Append(@"<li><a href=""" + pagina + @""">");
                sbMenuFilho.Append(mnFilho);
                sbMenuFilho.Append(@"</a></li>");
                sbMenuFilho.AppendLine(Environment.NewLine);

                //Define o nome do MenuLast com o nome do MenuPai
                lastMenuPai = curMenuPai;
            }
        }

        private void MontarMenu(DataTable dt)
        {
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                //Pega o nome da página
                pagina = dt.Rows[i]["Pagina"].ToString();

                //Valida se o Menu Pai é Igual ao último registro lido
                if (curMenuPai != dt.Rows[i]["mnPai"].ToString())
                {
                    curMenuPai = dt.Rows[i]["mnPai"].ToString();                    

                    //Se o último registro for igual a branco, adiciona o primeiro valor
                    if (lastMenuPai == string.Empty)
                    {
                        lastMenuPai = dt.Rows[i]["mnPai"].ToString();
                        curMenuPai = dt.Rows[i]["mnPai"].ToString();
                        sbMenuFilho.AppendLine(@"<li><a href=""" + pagina + @""">" + dt.Rows[i]["mnFilho"].ToString() + @"</a></li>");
                    }
                    else
                    {
                        FinalizaMenuPai(false, dt.Rows[i]["mnFilho"].ToString(), pagina);
                    }
                }
                else
                {
                    //Menu Pai já foi lido, adicionar Menu Filho ao Menu Pai
                    sbMenuFilho.Append(@"<li><a href=""" + pagina + @""">");
                    sbMenuFilho.Append(dt.Rows[i]["mnFilho"].ToString());
                    sbMenuFilho.Append(@"</a></li>");
                    sbMenuFilho.AppendLine(Environment.NewLine);
                }

                //Validar se é o último registro do Menu Filho
                if (i == dt.Rows.Count - 1)
                {
                    FinalizaMenuPai(true, null, pagina);
                }
            }

            //Aqui finaliza a montagem completo do Menu Superior
            sbMenu.AppendLine(@"<div class=""nav-collapse collapse"">");
            sbMenu.AppendLine(@"<ul class=""nav"">");

            //Nessa linha adiciona todos os menus montados
            sbMenu.AppendLine(sbMenuPai.ToString());

            sbMenu.AppendLine(@"</ul>");
            sbMenu.AppendLine(@"</div>");

            divMenuSuperior.InnerHtml += Environment.NewLine;
            divMenuSuperior.InnerHtml += sbMenu.ToString();
        }

        private void DefineNomeUsuario()
        {
            try
            {
                string nomeUsuario = Request.Cookies["grba"]["NomeUsuario"].ToString();
                lblNomeUsuario.InnerHtml = String.Format(@"<strong>{0}</strong>", nomeUsuario);
            }
            catch (Exception)
            {                
                Response.Redirect("~/Pages/Default.aspx");
            }      
        }
    }
}